package pl.edu.pw.polygen.modeler.client.object;

import java.util.List;

import pl.edu.pw.polygen.modeler.client.graph.BaseModel;
import pl.edu.pw.polygen.modeler.client.object.listener.IPolygenObjectListener;
import pl.edu.pw.polygen.modeler.client.workspace.IWorkspace;

public interface IPolygenObject {
	
	public void initialize();
	
	public IWorkspace getContext();
	
	public void setContext(IWorkspace context);
	
	public void draw();
	
	public void add();
	
	public void remove();
	
	public void addToCanvas();
	
	public void removeFromCanvas();
	
	public void setPosition(int x, int y);
	
	public boolean isHolded();
	
	public void hold();
	
	public void drop();
	
	public boolean isSelected();
	
	public void select();
	
	public void unselect();
	
	public void over();
	
	public void out();
	
	public void setPolygenObjectListener(IPolygenObjectListener polygenObjectListener);
	
	public void setSelectable();
	
	public void setMergeable();
	
	public void setLocked();
	
	public void merge(IPolygenObject source, IPolygenObject target);
	
	public void setModel(BaseModel model);
	
	public BaseModel getModel();
	
	public List<IPolygenObject> getPolygenParents();
	
	public void addPolygenParent(IPolygenObject polygenParent);
	
	public void removePolygenParent(IPolygenObject polygenParent);

	public void showBoundary();
	
	public void hideBoundary();
	
}
